  class ListNode {
     int val;
      ListNode next;
      ListNode() {}
      ListNode(int val) { this.val = val; }
      ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  }
public class demo1 {
    public ListNode reverseKGroup(ListNode head, int k) {
        ListNode cut=head;
        int n=0;
        while (cut!=null){
            n++;
            cut=cut.next;
        }
        int sum=n/k;
        ListNode cur=head;
        ListNode node=new ListNode();
        ListNode ret=node;
        while (sum>0){
            int temp=k;
            ListNode Hpregruop=cur;//记录当前组的头节点
            while (temp>0){
                ListNode t=cur.next;//每一次都是头插
                cur.next=ret.next;//下一次的next与上一次连接
                ret.next=cur;
                cur=t;
                temp--;
            }
            ret=Hpregruop;//虚拟头节点进行更换
            sum--;
        }
        if (cur!=null)ret.next=cur;
        return node.next;
    }
}
